##
# Makefile for our C Kernel
#

AS=gcc
CC=gcc
LD=ld
CFLAGS=-fno-builtin -Wall -Wextra -nostdlib -nostartfiles -nodefaultlibs

all: boot.o kernel.o gdt.o idt.o io.o exceptions.o isr.o pic.o println.o teclado.o memory.o
	$(LD) -Tsetup.ld boot.o isr.o gdt.o idt.o io.o pic.o println.o exceptions.o kernel.o teclado.o memory.o -o kernel.elf

boot.o: boot.S multiboot.h
	$(AS) $(CFLAGS) -DASM -c $<
	
isr.o: isr.S x86.h
	$(AS) $(CFLAGS) -DASM -c $<

gdt.o: gdt.c gdt.h
	$(CC) $(CFLAGS) -c $<
	
idt.o: idt.c idt.h exceptions.h io.h unistd.h x86.h
	$(CC) $(CFLAGS) -c $<

io.o: io.c io.h unistd.h
	$(CC) $(CFLAGS) -c $<

exceptions.o: exceptions.c exceptions.h println.h
	$(CC) $(CFLAGS) -c $<

pic.o: pic.c pic.h io.h
	$(CC) $(CFLAGS) -c $<

println.o: println.c println.h
	$(CC) $(CFLAGS) -c $<

kernel.o: kernel.c multiboot.h unistd.h println.h teclado.h
	$(CC) $(CFLAGS) -c $<

teclado.o: teclado.c teclado.h io.h
	$(CC) $(CFLAGS) -c $<

memory.o: memory.c println.h unistd.h
	$(CC) $(CFLAGS) -c $<

clean:
	@rm *.o kernel.elf

test:
	@qemu -M pc -fda disk.img -boot a

install:
	@mount -o loop disk.img /mnt
	@cp kernel.elf /mnt/boot
	@umount /mnt

